package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.exception.BusinessRuntimeException;
import com.itheima.pojo.OrderSetting;
import com.itheima.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.util.List;

/**
 * @author 黑马程序员
 * @Company http://www.ithiema.com
 * @Version 1.0
 */
@Service
public class OrderSettingServiceImpl implements OrderSettingService {

    @Autowired
    OrderSettingDao orderSettingDao;

    /**
     * 1.循环集合
     * 2. 根据日期 查询是否对该日期进行了预约设置
     * 3. 如果进行了预约设置，修改预约设置信息
     *      如果已预约人数大于可预约人数， 不合理的，提示错误
     *      相反，则直接修改成功即可
     * 4. 如果没有进行预约设置，添加预约设置信息
     *
     * @param orderSettingList
     */
    @Override
    @Transactional
    public void addOrderSettingList(List<OrderSetting> orderSettingList) {
        if(orderSettingList != null && orderSettingList.size() > 0){
            for (OrderSetting orderSetting : orderSettingList) {
                saveOrEdit(orderSetting);
            }
        }
    }

    /**
     * 当前月份的 预约设置信息
     *
     *      范围查询： orderDate >=  1号 ，小于等于 当月最后一天
     * @param month  2020-6
     * @return
     */
    @Override
    public List<OrderSetting> findByMonth(String month) {
        //获取当月第一天
        String thisMonthFirstDay = month + "-01"; // 2020-6-01
        //获取当月最后一天
        String thisMonthLastDay = null;
        try {
            thisMonthLastDay = DateUtils.getThisMonthLastDay(thisMonthFirstDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        List<OrderSetting> orderSettingList = orderSettingDao.findByMonth(thisMonthFirstDay, thisMonthLastDay);

        return orderSettingList;
    }

    /**
     * 添加或者修改
     *
     *
     * 根据日期 查询是否对该日期进行了预约设置
         如果进行了预约设置，修改预约设置信息
         如果已预约人数大于可预约人数， 不合理的，提示错误
         相反，则直接修改成功即可
         如果没有进行预约设置，添加预约设置信息
     */
    @Transactional
    public void saveOrEdit(OrderSetting orderSetting){
        //根据日期 查询是预约设置对象
        OrderSetting orderSettingDb = orderSettingDao.findByDate(orderSetting.getOrderDate());
        //开始判断，是否预约设置
        if(orderSettingDb == null){
            //说明没有预约设置，添加预约设置信息
            orderSettingDao.add(orderSetting);
        }else{
            //判断 已预约人数是否大于可预约人数
            //数据库中的已预约人数
            int reservations = orderSettingDb.getReservations();
            // 将要设置的可预约人数
            int number = orderSetting.getNumber();
            if(reservations > number){
                throw new BusinessRuntimeException("可预约必须大于已预约人数!!");
            }else{
                orderSettingDao.edit(orderSetting);
            }
        }

    }
}
